#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<string.h>
#include<sys/stat.h>
#include<fcntl.h>

int main()
{
    umask(0);
    int fd = open("log.txt",O_WRONLY | O_CREAT | O_APPEND ,0666);
    if(fd<0)
    {
        perror("open");
        return 1;
    }
    dup2(fd,1);
    close(fd);
    printf("Hello,xiaodu!\n");
    printf("fd:%d\n",fd);//打印之前fd的值
    fflush(stdout);//确保数据写入
}
//int main()
//{
//    umask(0);
//    close(1);
//    int fd = open("log.txt",O_WRONLY | O_CREAT | O_APPEND ,0666);
//    if(fd<0)
//    {
//        perror("open");
//        return 1;
//    }
//    printf("Hello,xiaodu!\n");
//    printf("fd:%d\n",fd);
//    fflush(stdout);//确保数据写入
//    close(fd);
//
//    return 0;
//
//}
//int main()
//{
//    umask(0);
//    close(1);
//    int fd = open("log.txt",O_WRONLY | O_CREAT,0666);
//    if(fd<0)
//    {
//        perror("open");
//        return 1;
//    }
//    printf("Hello,xiaodu!\n");
//    printf("fd:%d\n",fd);
//    //fflush(stdout);//确保数据写入
//    close(fd);
//
//    return 0;
//
//}

//int main()
//{
//    umask(0);
//    close(0);//关闭标准输入流
//    close(2);//关闭标准错误流
//    int fd1 = open("log1.txt",O_WRONLY | O_CREAT,0666);
//    int fd2 = open("log2.txt",O_WRONLY | O_CREAT,0666);
//    int fd3 = open("log3.txt",O_WRONLY | O_CREAT,0666);
//    if(fd1 < 0)
//    {
//        perror("open");
//        return 1;
//    }
//    else 
//    {
//        printf("fd1:%d\n",fd1);
//    }
//    if(fd2 < 0)
//    {
//        perror("open");
//        return 1;
//    }
//    else 
//    {
//        printf("fd2:%d\n",fd2);
//    }
//    if(fd3 < 0)
//    {
//        perror("open");
//        return 1;
//    }
//    else 
//    {
//        printf("fd3:%d\n",fd3);
//    }
//    return 0;
//}
//
////int main()
////{
////    umask(0);
////    int fd = open("log.txt" , O_RDONLY , 0666);
////    if(fd < 0)
//    {
//        perror("open");
//        return 1;
//    }
//
//    char buf[1024] = {0};
//    const char* msg = "hello xiaodu\n";
//    int count = 0;
//    while(1)
//    {
//        int ret = read(fd,buf,strlen(msg));
//        if(ret > 0)
//        {
//            count++;
//            printf("%d:%s\n",count,buf);
//
//        }
//        else 
//        {
//            break;
//        }
//    }
//    close(fd);
//    return 0;
//
//}


//int main()
//{
//    umask(0);//设置文件创建的掩码
//    int fd = open("log.txt",O_WRONLY | O_CREAT,0666);
//    if( fd < 0 )
//    {
//        perror("open");
//        return 1;
//    }
//
//    const char* msg = "hello xiaodu\n";
//    int count = 3;
//    int len = strlen(msg);
//    while(count--)
//    {
//        int ret = write(fd,msg,len);
//        if(ret != len)
//        {
//            perror("write");
//            break;
//        }
//        printf("%d\n",ret);
//    }
//    close(fd);
//    return 0;
//}
//
//
////#define ONE 0x001//0000 0001
////#define TWO 0x002//0000 0010
//#define THREE 0x004//0000 0100
//
//void func(int f)
//{
//    if(f & ONE) 
//        printf("ONE ");
//    if(f & TWO)
//        printf("TWO ");
//    if(f & THREE)
//        printf("THREE ");
//    printf("\n");
//}
//int main()
//{
//    func(ONE);
//    func(TWO);
//    func(THREE);
//    func(ONE | TWO);
//    func(ONE | TWO | THREE);//异或按位进行操作
//    return 0;
//}

//int main()
//{
//    const char *msg = "hello fwrite\n";
//    
//    // 方法1：使用 fwrite
//    fwrite(msg, strlen(msg), 1, stdout);
//
//    // 方法2：使用 printf
//    printf("hello printf\n");
//    
//    // 方法3：使用 fprintf
//    fprintf(stdout, "hello fprintf\n");
//    
//    return 0;
//}
//int main(int argc,char* argv[])
//{
//    if(argc != 2)
//    {
//        printf("argv error\n");
//        return 1;
//    }
//
//    FILE* fp = fopen(argv[1],"r");
//    if(!fp)
//    {
//        perror("fopen");
//        return 2;
//    }
//
//    char buf[1024]={0};
//    while(1)
//    {
//        int ret = fread(buf,1,sizeof(buf),fp);
//        if(ret > 0)
//        {
//            //字符串末尾添加0
//            buf[ret]=0;
//            printf("%s",buf);
//        }
//        if(feof(fp))
//            break;//读到文件末尾，停止读取
//    }
//    
//    fclose(fp);
//    return 0;
//}
//



//int main()
//{
//    FILE* fp= fopen("log.txt","w");
//    if(!fp)
//    {
//        perror("fopen");
//        return 1;
//    }
//    const char* msg = "Hello,xiaodu!\n";
//    int count = 5;
//    while(count--)
//    {
//       int ret =  fwrite(msg,strlen(msg),1,fp);
//       printf("fwrite返回值：%d\n",ret);
//    }
//    fclose(fp);
//    return 0;
//}
//
////int main()
////{
//    FILE *fp=fopen("log.txt","w");
//    if(!fp)
//    {
//        perror("fopen");
//        return 1;
//    }
//    printf("成功打开文件！\n");
//    printf("进程id:%d\n",getpid());
//    while(1);
//    fclose(fp);
//    return 0;
//}
